from django.shortcuts import render

from rest_framework.views import APIView

from rest_framework.response import Response

from django.core.paginator import Paginator

from .ser import *

from .models import *

import re

# Create your views here.



#   班级表操作
class CalssM(APIView):
    # 获取班级及班级下的课程
    def get(self,request):
        # 获取班级表所有信息
        cla=Class.objects.all()
        # 调用班级表序列化器  这是一个嵌套序列化器
        ser=ClassSer(cla,many=True)
        return Response({'code':200,'list':ser.data})

#  注册接口
class Reg(APIView):
    def post(self,request):
        # 调用学生表序列化器
        ser=StudentSer(data=request.data)
        # 验证
        if ser.is_valid():
            ser.save()
            # 注册成功，返回 student、id、name0        通过获取username来获取Student表中的信息 然后赋值给了student
            student=Student.objects.filter(username=request.data.get('username')).first()
            # 返回  根据student获取id和name
            return Response({'code':200,'id':student.id,'name':student.name})
        else:
            print(ser.errors)
            return Response({'code':10010})


    def get(self,request):
        # 获取id
        id=request.GET.get('id')
        # 拿到id之后去这张表里查信息
        student=Student.objects.filter(id=id).first()
        # 调用序列化器
        ser=ShowStuSer(student)
        # 返回
        return Response({'code':200,'cla':ser.data})
        # return Response('ok')

#   升班按钮
class ChangeClass(APIView):
    def post(self,request):
        # 升班
        # 获取小朋友id
        id=request.data.get('id')
        # 查询小朋友现在所在班级，type=3 返回，1,2  first()的意思是只取一条数据
        student=Student.objects.filter(id=id).first()
        # 调用序列化器
        ser=ShowStuSer(student)
        s=ser.data
        if s['cla']['type']==1:
            # 升级为中班
            # 查询类型为中班的班级id
            cla=Class.objects.filter(type=2).first()
            student.cla_id=cla.id
            student.save()
            return Response({'code':200})
        elif s['cla']['type']==2:
            # 升级为大班
            # 查询类型为中班的班级id
            cla=Class.objects.filter(type=3).first()
            student.cla_id=cla.id
            student.save()
            return Response({'code':200})
        else:
            #返回不能升级
            return Response({'code':20010})

# 分类表操作
class CateM(APIView):
    def post(self,request):
        # 调用序列化器
        ser=CateSer(data=request.data)
        # 验证
        if ser.is_valid():
            # 保存
            ser.save()
            # 返回
            return Response({'code':200})
        else:
            print(ser.errors)
            return Response({'code':10010})

    def get(self,request):
        # 获取分类表所有信息
        cate=Cate.objects.all()
        # 调用序列化器
        ser=CateSer(cate,many=True)
        # 返回
        return Response({'code':200,'list':ser.data})

# 商品表操作
class ShowshopM(APIView):
    def post(self,ruquest):
        #调用序列化器
        ser=Show_ShopSer(data=ruquest.data)
        #验证
        if ser.is_valid():
            #保存
            ser.save()
            #返回
            return Response({'code':200})
        else:
            print(ser.errors)
            return Response({'code':10010})
    # 展示商品表
    def get(self,request):
        # 获取商品表所有信息
        shop=Show_Shop.objects.all()
        # 调用商品表序列化器 这是一个嵌套序列化器
        ser=Show_ShopSer(shop,many=True)
        # 返回
        return Response({'code':200,'list':ser.data})

class ShopRegM(APIView):
    # 注册
    def post(self,request):
        # 调用序列化器
        ser=UserSer(data=request.data)
        # 验证
        if ser.is_valid():
            # 保存
            ser.save()
            # 返回
            return Response({'code':200,'list':ser.data})
        else:
            print(ser.errors)
            return Response({'code':10010})

class LoginM(APIView):
    # 登录
    def post(self,request):
        # 获取用户名
        username=request.data.get('username')
        # 获取密码
        password=request.data.get('password')
        # 通过用户名来过滤信息
        user=User.objects.filter(username=username).first()
        # 验证
        if user: #如果user成立
            if password==user.password:
                # 返回
                return Response({'code':200,'userid':user.id})
            else:
                return Response({'code':20010,'mes':'密码错误'})
        else:
            return Response({'code':20011,'mes':'用户不存在'})

# 老师表操作
class TeacherM(APIView):
    # 老师表注册
    def post(self,request):
        # 调用老师表序列化器
        ser=TeacherSer(data=request.data)
        # 验证
        if ser.is_valid():
            # 保存
            ser.save()
            return Response({'code':200})
        else:
            print(ser.errors)
            return Response({'code':20010})
    # 老师表展示
    def get(self,request):
        # 获取老师表所有信息
        teacher=Teacher.objects.all()
        # 调用老师表序列化器
        ser=TeacherSer(teacher,many=True)
        # 返回
        return Response({'code':200,'list':ser.data})
#  老师登录
class TeaLogin(APIView):
    # 老师表登录
    def post(self,request):
        # 获取老师表用户名
        username=request.data.get('username')
        # 获取老师表密码
        password=request.data.get('password')
        # 验证
        if username and password:
            #登录 通过用户名过滤老师表信息
            teacher = Teacher.objects.filter(username=username,password=password).first()
            # 如果teacher 存在 返回用户id 和用户名
            if teacher:
                return Response({'code':200,'tid':teacher.id,'tname':teacher.username})
            else:
                return Response({'code':10010,'mes':'用户名或密码不正确'})
        else:
            return Response({'code':20010,'mes':'用户不存在'})

# 学生表操作
class XstudentM(APIView):
    # 学生表注册
    def post(self,request):
        # 调用学生表序列化器
        ser=XstudentSer(data=request.data)
        # 验证
        if ser.is_valid():
            # 保存
            ser.save()
            return Response({'code':200})
        else:
            print(ser.errors)
            return Response({'code':20010})
    # 学生表展示
    def get(self,request):
        # 获取tid
        tid=request.GET.get('tid')
        # 判断 如果tid存在的话
        if tid:
            # 通过tid过滤信息
            stu=Xstudent.objects.filter(teach_id=tid).all()
        else:
            # 没绑定的所有学生
            stu=Xstudent.objects.filter(teach_id__isnull=True).all()
        # 调用序列化器
        ser=XstudentSer(stu,many=True)
        # 返回
        return Response({'code':200,'list':ser.data})
    # 删除外键关联
    def put(self,request):
        # 获取id
        id=request.GET.get('id')
        # 获取tid
        tid=request.GET.get('tid')
        # 如果tid存在
        if tid:
            # 绑定
            Xstudent.objects.filter(id=id).update(teach_id=tid)
        # 通过id过滤信息 把信息进行修改
        else:
            #解绑
            Xstudent.objects.filter(id=id).update(teach_id='')
        # 返回
        return Response({'code':200})





# 新建商品表操作
class XshopM(APIView):
    def post(self,ruquest):
        #调用序列化器
        ser=XShopSer(data=ruquest.data)
        #验证
        if ser.is_valid():
            #保存
            ser.save()
            #返回
            return Response({'code':200})
        else:
            print(ser.errors)
            return Response({'code':10010})
    # 展示商品表
    def get(self,request):
        # 获取商品表信息
        xshop=XShop.objects.all()
        # 调用序列化器
        ser=XShopSer(xshop,many=True)
        # 返回
        return Response({'code':200,'list':ser.data})

# 新用户表操作
class XuserM(APIView):
    # 登录
    def post(self,request):
        # 获取用户名
        username=request.data.get('username')
        # 获取密码
        password=request.data.get('password')
        # 通过用户名过滤用户表信息
        user=Xuser.objects.filter(username=username).first()
        # 验证
        if user:
            if password==user.password:
                # 返回
                return Response({'code':200,'userid':user.id})
            else:
                return Response({'code':10010,'mes':'密码错误'})
        else:
            return Response({'code':20010,'mes':'用户不存在'})


# 学校管理系统注册
class Regxd(APIView):
    #注册
    def post(self,request):
        # 调用序列化器
        ser=XUSer(data=request.data)
        # 验证
        if ser.is_valid():
            # 保存
            ser.save()
            # 返回
            return Response({'code':200})
        else:
            print(ser.errors)
            return Response({'code':10010})

    # 获取用户表
    def get(self, request):
        # 获取用户表所有信息
        xu = XU.objects.all()
        # 调用学生表序列化器
        ser = XUSer(xu, many=True)
        # 返回
        return Response({'code': 200, 'list': ser.data})
# 新建学校表登录
class Loginxd(APIView):
    def post(self,request):
        # 获取username
        username=request.data.get('username')
        # 获取密码
        password=request.data.get('password')
        # 通过用户名过滤获取信息
        user=XU.objects.filter(username=username).first()
        # 验证 如果user存在
        if user:
            # 如果获取的密码和数据库中密码一致
            if password==user.password:
                # 返回
                return Response({'code':200,'userid':user.id})
            else:
                return Response({'code':10010,'mes':'密码不正确'})
        else:
            return Response({'code':20010,'mes':'用户名不存在'})

# 学校表操作
class SchoolM(APIView):
    def post(self,request):
        # 调用序列化器
        ser=SchoolSer(data=request.data)
        # 验证
        if ser.is_valid():
            # 保存
            ser.save()
            # 返回
            return Response({'code':200})
        else:
            print(ser.errors)
            return Response({'code':10010})
    # 学校展示
    def get(self,request):
        # 获取学校表所有信息
        school=School.objects.all()
        # 调用学校表序列化器
        ser=SchoolSer(school,many=True)
        # 返回
        return Response({'code':200,'list':ser.data})

    # 学校表修改
    def put(self, request):
        # 获取id
        id = request.GET.get('id')
        name=request.GET.get('name')
        # 如果id存在
        if id:
            # 通过id过滤信息 把信息进行修改
            School.objects.filter(id=id).update(name=name)
        # 返回
        return Response({'code': 200})
# 班级表操作
class XclassM(APIView):
    def post(self,request):
        # 调用序列化器
        ser=XclassSer(data=request.data)
        # 验证
        if ser.is_valid():
            # 保存
            ser.save()
            # 返回
            return Response({'code':200})
        else:
            print(ser.errors)
            return Response({'code':10010})
    # 学校展示
    def get(self,request):
        # 获取班级表所有信息
        cla=Xclass.objects.all()
        # 调用班级表序列化器
        ser=GclassSer(cla,many=True)
        # 返回
        return Response({'code':200,'list':ser.data})

# 学生表操作
class XstM(APIView):
    # 学生表添加
    def post(self,request):
        # 调用序列化器
        ser=XstSer(data=request.data)
        # 验证
        if ser.is_valid():
            # 保存
            ser.save()
            # 返回
            return Response({'code':200})
        else:
            print(ser.errors)
            return Response({'code':10010})
    # 学生表展示
    def get(self,request):
        # 获取学生表所有信息
        stu=Xst.objects.all()
        # 调用学生表嵌套序列化器
        ser=GxstudentSer(stu,many=True)
        # 返回
        return Response({'code':200,'list':ser.data})

# 店主表操作
class ShopkeeperM(APIView):
    # 获取店主表
    def get(self,request):
        # 获取店主表所有信息
        shopkeep=Shopkeeper.objects.all()
        # 调用序列化器
        ser=ShopkeepSer(shopkeep,many=True)
        # 返回
        return Response({'code':'200','list':ser.data})

# 商品表操作
class ShopM(APIView):
    # 商品表添加
    def post(self,request):
        # 调用序列化器
        ser=ShopkSer(data=request.data)
        # 验证
        if ser.is_valid():
            # 保存
            ser.save()
            return Response({'code':'200'})
        else:
            print(ser.errors)
            return Response({'code':'10010'})
    # 商品表展示
    def get(self,request):
        #获取商品表所有信息
        shop=Shop.objects.all()
        #调用序列化器
        ser=ShopSer(shop,many=True)
        # 返回
        return Response({'code':200,'list':ser.data})

# 用户表操作
class keepuserM(APIView):
    # 注册
    def post(self,request):
        # 调用序列化器
        ser=keepuserSer(data=request.data)
        # 验证
        if ser.is_valid():
            # 保存
            ser.save()
            # 返回
            return Response({'code':200})

# 用户表操作
class keeserM(APIView):
    # 登录
    def post(self,request):
        # 获取username
        username=request.data.get('username')
        # 获取password
        password=request.data.get('password')
        # 通过用户名获取信息
        user=keepuser.objects.filter(username=username).first()
        # 验证
        if user:
            # 如果获取的密码和数据库中的密码一致
            if password==user.password:
                #返回
                return Response({'code':200,'userid':user.id})
            else:
                return Response({'code':10010,'mes':'密码不正确'})
        else:
            return Response({'code':20010,'mes':'用户不存在'})